home *** CD-ROM | disk | FTP | other *** search
/ Exploring Where & Why / Exploring Where & Why.iso / pc / MAIN.DIR / Internal_115_Animated Sprite Object.ls < prev    next >
Encoding:
Text File  |  2004-07-12  |  2.1 KB  |  94 lines

  1. property myDelay, mySprite, myMemberList, myMemberListPointer, myPausedState, myCastLib, myTimerFlag, myCycles, CycleCounter
  2.  
  3. on new me, theSprite, theTicks, cycles
  4.   myCastLib = castLib("Characters").number
  5.   mySprite = theSprite
  6.   myDelay = theTicks
  7.   myPausedState = 1
  8.   myMemberList = []
  9.   myCycles = cycles
  10.   CycleCounter = 1
  11.   puppetSprite(mySprite, 1)
  12.   getMyMemberList(me)
  13.   preloadMyMembers(me)
  14.   myTimerFlag = the timer
  15.   return me
  16. end
  17.  
  18. on destruct me
  19.   puppetSprite(mySprite, 0)
  20. end
  21.  
  22. on getMyMemberList me
  23.   firstMember = the member of sprite mySprite
  24.   myMemberListPointer = 1
  25.   memberName = member(firstMember).name
  26.   startNum = the number of member firstMember
  27.   endNum = startNum + the number of castMembers of castLib myCastLib
  28.   repeat with mNum = startNum to endNum
  29.     if member(mNum).type <> #empty then
  30.       if member(mNum).name = memberName then
  31.         add(myMemberList, mNum)
  32.       else
  33.         exit repeat
  34.       end if
  35.       next repeat
  36.     end if
  37.     exit repeat
  38.   end repeat
  39. end
  40.  
  41. on preloadMyMembers me
  42.   repeat with x = 1 to count(myMemberList)
  43.     preloadMember(member(getAt(myMemberList, x), myCastLib))
  44.   end repeat
  45. end
  46.  
  47. on stepFrame me
  48.   Animate(me)
  49. end
  50.  
  51. on Animate me
  52.   if timeToAnimate(me) then
  53.     myMemberListPointer = myMemberListPointer + 1
  54.     if myMemberListPointer > count(myMemberList) then
  55.       myMemberListPointer = 1
  56.       CycleCounter = CycleCounter + 1
  57.       if CycleCounter > myCycles then
  58.         CycleCounter = 0
  59.         myPausedState = 1
  60.       end if
  61.     end if
  62.     set the member of sprite mySprite to getAt(myMemberList, myMemberListPointer)
  63.   end if
  64. end
  65.  
  66. on timeToAnimate me
  67.   if myPausedState = 0 then
  68.     if the timer >= (myTimerFlag + myDelay) then
  69.       myTimerFlag = the timer
  70.       return 1
  71.     end if
  72.   else
  73.     if the timer >= (myTimerFlag + (myDelay * 2)) then
  74.       myTimerFlag = the timer
  75.       if CycleCounter = 0 then
  76.         CycleCounter = 1
  77.         return 0
  78.       end if
  79.       x = random(10)
  80.       if x > 8 then
  81.         myPausedState = 0
  82.         myTimerFlag = the timer
  83.         return 1
  84.       end if
  85.       myTimerFlag = the timer
  86.     end if
  87.   end if
  88.   return 0
  89. end
  90.  
  91. on actorType me
  92.   return #animator
  93. end
  94.